//  共享内存  进程通信
// 
//  功能验证： 子进程写   父进程读取共享内存的内容 ，


# include <stdio.h>
# include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string. h>

#define MEMSIZE  1024

int main (){
    int shmid;
    pid_t pid;
    char * ptr;

    shmid = shmget(IPC_PRIVATE, MEMSIZE, 0600);  //创建匿名的共享内存
    if(shmid < 0){
        perror("shmget()");
        exit(1);
    }

    
    pid = fork(); 
    if (pid < 0){
         perror("fork() "); 
         
         exit (1);
    }
    if(pid == 0){   //子进程  写
        ptr = shmat(shmid, NULL,0);   //添加映射
        if(ptr == (void *)-1){
            perror("shmat ()");
            exit(1); 
        }
        strcpy(ptr, "Hello");
        shmdt(ptr);   //解除映射
        exit(0);
    }  
    else{          //父进程  读
        wait (NULL);   //收尸
        ptr = shmat(shmid, NULL,0);   //添加映射
        if(ptr == (void *)-1){
            perror("shmat ()");
            exit(1); 
        }
        puts (ptr); 
        shmdt(ptr);  //解除映射
        shmctl (shmid, IPC_RMID, NULL);   //销毁共享
        exit (O);  
    }
    exit (0);
}





